package com.campus.customer.controller;

import com.campus.common.bean.common.Pagination;
import com.campus.common.bean.common.Resp;
import com.campus.customer.bean.notice.NoticeQueryParam;
import com.campus.customer.service.NoticeService;
import com.campus.customer.vo.NoticeVo;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 公告表 前端控制器
 * </p>
 *
 * @author ZhaoYuJie
 * @since 2025-07-15
 */
@RestController
@RequestMapping("/notice")
public class NoticeController {

    @Autowired
    private NoticeService noticeService;

    /**
     * 获取顾客端公告列表（首页显示）
     * @return 公告列表
     */
    @GetMapping("/list")
    public Resp<List<NoticeVo>> getNoticeList() {
        List<NoticeVo> noticeList = noticeService.getCustomerNoticeList();
        return Resp.success(noticeList);
    }

    /**
     * 分页查询公告列表
     * @param queryParam 查询参数
     * @return 分页结果
     */
    @ApiOperation("分页查询公告列表")
    @GetMapping("/page")
    public Resp<Pagination<NoticeVo>> getNoticeListPage(NoticeQueryParam queryParam) {
        PageInfo<NoticeVo> pageInfo = noticeService.getNoticeListPage(queryParam);
        return Resp.successPageable(pageInfo);
    }

    /**
     * 根据ID获取公告详情
     * @param id 公告ID
     * @return 公告详情
     */
    @GetMapping("/{id}")
    public Resp<NoticeVo> getNoticeById(@PathVariable Integer id) {
        NoticeVo notice = noticeService.getNoticeById(id);
        if (notice == null) {
            return Resp.error("公告不存在");
        }
        return Resp.success(notice);
    }

    /**
     * 增加公告查看次数
     * @param id 公告ID
     * @return 操作结果
     */
    @PostMapping("/{id}/view")
    public Resp<Void> incrementViewCount(@PathVariable Integer id) {
        boolean success = noticeService.incrementViewCount(id);
        if (success) {
            return Resp.success();
        } else {
            return Resp.error("更新失败");
        }
    }
}
